// 导入 axios
import axios from 'axios'
// 导入 store
import store from '@/store'
import router from '@/router'
// 创建 axios 的副本实例
const instance = axios.create({
  baseURL: '/api'
})
// 设置拦截器
instance.interceptors.request.use(config => {
  // 全局注入 token
  const token = store.getters.token
  // p判断 token 是否存在
  if (token) {
    // 如果存在: 添加到请求信息中
    config.headers.Authorization = `Bearer ${token}`
  }
  // 如果不存在: 不理会
  // 得到 token
  return config
}, error => {
  return Promise.reject(error)
})
instance.interceptors.response.use(
  // 响应成功时的回调函数
  response => {
    // 请求返回的信息
    const {
      data,
      message,
      success
    } = response.data
    // 判断当前的状态
    if (success) {
      // 响应成功: 直接将信息返回给请求
      return response
    } else {
      // 响应失败: 报一个错
      return Promise.reject(new Error(message))
    }
  },
  // 响应失败时的回调函数
  error => {
    // 得到服务器响应的回来的 code 值
    if (error.response && error.response.data && error.response.data.code === 10002) {
      // 说明当前错误是因为 token 失效产生的
      // 删除 token
      store.dispatch('user/logout')
      // 跳转到登录页
      router.push('/login')
    }
    return Promise.reject(error)
  })
// 暴露对象
export default instance
